# 376.摆动序列
# 如果连续数字之间的差严格地在正数和负数之间交替，则数字序列称为摆动序列 。第一个差（如果存在的话）可能是正数或负数。仅有一个元素或者含两个不等元素
# 的序列也视作摆动序列。
# 例如， [1, 7, 4, 9, 2, 5]是一个摆动序列 ，因为差值(6, -3, 5, -7, 3)是正负交替出现的。
# 相反，[1, 4, 7, 2, 5]和[1, 7, 4, 5, 5]不是摆动序列，第一个序列是因为它的前两个差值都是正数，第二个序列是因为它的最后一个差值为零。
# 子序列可以通过从原始序列中删除一些（也可以不删除）元素来获得，剩下的元素保持其原始顺序。
#
# 给你一个整数数组nums ，返回nums中作为摆动序列的最长子序列的长度 。
#
# 示例1：
# 输入：nums = [1, 7, 4, 9, 2, 5]
# 输出：6
# 解释：整个序列均为摆动序列，各元素之间的差值为(6, -3, 5, -7, 3) 。
#
# 示例2：
# 输入：nums = [1, 17, 5, 10, 13, 15, 10, 5, 16, 8]
# 输出：7
# 解释：这个序列包含几个长度为7摆动序列。其中一个是[1, 17, 10, 13, 10, 16, 8] ，各元素之间的差值为(16, -7, 3, -3, 6, -8) 。
#
# 示例3：
# 输入：nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 输出：2


class Solution:
    def wiggleMaxLength(self, nums:[int]) -> int:
        # 这个算是贪心嘛
        size = len(nums)
        seq = []
        flag = 1 #用flag来标记上一个差值的正负，正1负0
        for i in range(1, size):
            tmp = nums[i] - nums[i - 1]
            if tmp == 0: # 题目中要求是在正数和负数之间交替，所以跳过0
                continue
            if seq:
                if flag and tmp < 0:
                    seq.append(tmp)
                    flag = 0
                elif flag == 0 and tmp > 0:
                    seq.append(tmp)
                    flag = 1
            else:
                if tmp < 0: # 如果第一个差值是负值，必须要设置flag为False
                    flag = 0
                seq.append(tmp)
        return len(seq)+1

if __name__ == '__main__':
    nums = [1, 7, 4, 9, 2, 5]
    nums = [1, 17, 5, 10, 13, 15, 10, 5, 16, 8]
    nums = [0,0]
    nums = [3,3,3,2,5]
    # nums = [84]
    # nums= [1, 2, 3, 4, 5, 6, 7, 8, 9]
    tmp = Solution()
    res = tmp.wiggleMaxLength(nums)
    print(res)